The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, the approaches described in this section are not prior art to the claims in this application and are not admitted to be prior art, merely by inclusion in this section.
In a client-server software system, a client-side entity, such as a process or a thread, requests services from a server. Each time a client-side entity requests communication with a server, such as a database server, a new connection is established between the server and the client-side entity. The connection that is established is dedicated to the client-side entity, and cannot be used by other client-side entities. When a client-side entity finishes communicating with the server, the connection may have to be destroyed. Additionally, in some networks, a connection may be established between a client application and a database server for use during the entire course of a user session. The connection is reserved for the client application. In this case, each time there is a new user, a new, dedicated connection to the server must be established.
In the context of networks that involve database queries, each time a request is made to communicate with the database server, a network may employ a process similar to, for example, the following process: (1) Receive a request from a client-side entity to communicate with a database; (2) Establish a dedicated connection between the client-side entity and the database; (3) Issue a query to the database; (4) Receive the results of the query; (6) Process the results of the query; and (7) Destroy the connection.
The establishment of connections each time a request is made to communicate with a server may have a negative effect on the efficiency of a network. For example, users who are attempting to communicate with a server may experience frustrating delays as dedicated connections are established each time the user attempts to communicate with the server. The delays are a result of the fact that a number of painstaking steps, such as those listed above, must be undertaken each time a connection is established. Such networks often result in the creation of an abundance of connections that are needed for only a relatively short period of time. Accordingly, such network architectures may be required to destroy a great number of connections that are no longer needed. Valuable processing resources may be consumed if connections must be frequently established and/or destroyed. For example, connection attributes may need to be respecified and reprocessed each time a connection is established.
Network architectures that establish dedicated connections for each request to communicate with a server, or for each session, may also be wasteful of network resources, because, due to their “dedicated” nature, only a single client-side entity, such as a single thread, or a particular session, may make use of a connection. In such architectures, if multiple client-side entities are attempting to communicate to the server, then there must be a separate, dedicated connection for each client-side entity. If there are many users or client-side entities, then a very large number of separate, dedicated connections may have to be established. This may result in a strain on various aspects of the network. For example, the large number of connections may consume large amounts of memory, which may hinder the performance of the network. Furthermore, wasteful overhead may result if an excessive number of idle connections for idle users who infrequently access the server, or who no longer need to access the server.
Additionally, there may exist certain applications that, based on their own particular attributes, are unable to hold a dedicated connection for each communication request. An example of such an application may be an email server. It would be desirable to have a scheme according to which such applications may efficiently connect to a server.
It would also be desirable to have mechanism whereby the foregoing processing and storage overhead problems might be avoided.